// 利用位运算统计每个二进制位的出现次数
class Solution {
    public int singleNumber(int[] nums) {
        int ret = 0;
        for(int i = 0; i < 32; i++) { // 依次修改ret中的每一位比特位
            int sum = 0; // 统计nums中所有数的第i位的和
            for(int x : nums) {
                if(((x >> i) & 1) == 1) {
                    sum++;
                }
            }
            // 模掉3的倍数，如果等于1，那就把ret的i位赋为1
            sum %= 3;
            if(sum == 1) {
                ret = ret | (1 << i);
            }
        }
        return ret;
    }
}